﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data;
using Public;

namespace DAL
{
    public class NhapKho_DAL
    {
        Connection conn = new Connection();
        NhapKho_PB nk_pb=new NhapKho_PB();

        #region "Load cbo đối tác"
        public DataTable LayDSNCC()
        {
            return conn.LoadData("select MANCC,TENNCC from NHACUNGCAP");
        }
        #endregion

        #region "Lấy tên ncc"
        public DataTable LayTenNCC(string mancc)
        {
            return conn.LoadData("select TENNCC from NHACUNGCAP where MANCC='"+mancc+"'");
        }
        #endregion

        #region "Thêm phiếu nhập kho"
        public int ThemNhapKho(NhapKho_PB nk_pb)
        {
            int nparameter = 7;
            string[] name = new string[nparameter];
            object[] value = new object[nparameter];
            name[0] = "@maphieunhap"; value[0] = NhapKho_PB.MaPhieuNhap;
            name[1] = "@mancc"; value[1] = NhapKho_PB.MaNCC;
            name[2] = "@nguoigiaohang"; value[2] = NhapKho_PB.NguoiGiaoHang;
            name[3] = "@diengiai"; value[3] = NhapKho_PB.DienGiai;
            name[4] = "@ngayhachtoan"; value[4] = NhapKho_PB.NgayHachToan;
            name[5] = "@ngaychungtu"; value[5] = NhapKho_PB.NgayChungTu;
            name[6] = "@sochungtu"; value[6] = NhapKho_PB.MaPhieuNhap;
            string sql = "insert into PHIEUNHAP values (@maphieunhap,@mancc,@nguoigiaohang,@diengiai,@ngayhachtoan,@ngaychungtu,@sochungtu)";
            return conn.Update(sql, name, value, nparameter);
        }

        #region "Sửa phiếu nhập kho"
        public int SuaNhapKho(NhapKho_PB nk_pb)
        {
            int nparameter = 7;
            string[] name = new string[nparameter];
            object[] value = new object[nparameter];
            name[0] = "@maphieunhap"; value[0] = NhapKho_PB.MaPhieuNhap;
            name[1] = "@mancc"; value[1] = NhapKho_PB.MaNCC;
            name[2] = "@nguoigiaohang"; value[2] = NhapKho_PB.NguoiGiaoHang;
            name[3] = "@diengiai"; value[3] = NhapKho_PB.DienGiai;
            name[4] = "@ngayhachtoan"; value[4] = NhapKho_PB.NgayHachToan;
            name[5] = "@ngaychungtu"; value[5] = NhapKho_PB.NgayChungTu;
            name[6] = "@sochungtu"; value[6] = NhapKho_PB.MaPhieuNhap;
            string sql = "update PHIEUNHAP set MANCC=@mancc,NGUOIGIAOHANG=@nguoigiaohang,DIENGIAI=@diengiai,NGAYHACHTOAN=@ngayhachtoan,NGAYCHUNGTU=@ngaychungtu,SOCHUNGTU=@sochungtu where MAPHIEUNHAP=@maphieunhap";
            return conn.Update(sql, name, value, nparameter);
        }
        #endregion

        #region "Xóa phiếu nhập kho"
        public int XoaNhapKho(NhapKho_PB nk_pb)
        {
            int nparameter = 1;
            string[] name = new string[nparameter];
            object[] value = new object[nparameter];
            name[0] = "@maphieunhap"; value[0] = NhapKho_PB.MaPhieuNhap;
            string sql=" delete from PHIEUNHAP where MAPHIEUNHAP=@maphieunhap";
            return conn.Update(sql, name, value, nparameter);
        }
        public int XoaNhapKho1(NhapKho_PB nk_pb)
        {
            int nparameter = 1;
            string[] name = new string[nparameter];
            object[] value = new object[nparameter];
            name[0] = "@maphieunhap"; value[0] = NhapKho_PB.MaPhieuNhap;
            string sql = " delete from CHITIETNHAP where MAPHIEUNHAP=@maphieunhap";
            return conn.Update(sql, name, value, nparameter);
        }
        #endregion


        #endregion

        #region "Lấy DS Phiếu nhập kho"
        public DataTable LayDSPhieuNhap()
        {
            return conn.LoadData("select MAPHIEUNHAP,pn.MANCC,ncc.TENNCC,NGUOIGIAOHANG,DIENGIAI,NGAYHACHTOAN,NGAYCHUNGTU,SOCHUNGTU from PHIEUNHAP pn,NHACUNGCAP ncc where pn.MANCC=ncc.MANCC");
        }
        #endregion

        #region "Lấy DS Tồn Kho"
        public DataTable LayDSTonKho()
        {
            return conn.LoadData("SELECT VATTU.MAVATTU, VATTU.TENVATTU, VATTU.DONGIAMUA, DONVITINH.DIENGIAI FROM VATTU INNER JOIN DONVITINH ON VATTU.DONVITINH = DONVITINH.MADONVITINH");
        }
        #endregion

        #region "Lấy DS Kho"
        public DataTable LayDSKho()
        {
            return conn.LoadData("select MAKHO,TENKHO from KHO");
        }
        #endregion

        #region "Lấy DS chi tiết nhập kho"
        public DataTable LayDSCTNhapKho()
        {
            return conn.LoadData("select ID,MAPHIEUNHAP,MAHANG,vt.TENVATTU,ctn.MAKHO,dvt.DIENGIAI,ctn.SOLUONG,DONGIA,THANHTIEN,HANSUDUNG from CHITIETNHAP ctn,TONKHO tk,VATTU vt,DONVITINH dvt where ctn.MAHANG=tk.MAVATTU and vt.DONVITINH=dvt.MADONVITINH and tk.MAVATTU=vt.MAVATTU and MAPHIEUNHAP='XXXX'");
        }
        public DataTable LayDSCTNhapKho(string maPhieuNhap)
        {
            return conn.LoadData("select ID,MAPHIEUNHAP,MAHANG,vt.TENVATTU,ctn.MAKHO,dvt.DIENGIAI,ctn.SOLUONG,DONGIA,THANHTIEN,HANSUDUNG from CHITIETNHAP ctn,TONKHO tk,VATTU vt,DONVITINH dvt where ctn.MAHANG=tk.MAVATTU and vt.DONVITINH=dvt.MADONVITINH and tk.MAVATTU=vt.MAVATTU and MAPHIEUNHAP='" + maPhieuNhap + "'");
        }

        #endregion

        #region "Thêm CT Nhập Kho"
        public int ThemCTNhapKho(NhapKho_PB nk_pb)
        {
            int nparameter = 7;
            string[] name = new string[nparameter];
            object[] value = new object[nparameter];
            name[0] = "@id"; value[0] = NhapKho_PB.ID;
            name[1] = "@mapn"; value[1] = NhapKho_PB.MaPhieuNhap;
            name[2] = "@mahang"; value[2] = NhapKho_PB.MaHang;
            name[3] = "@makho"; value[3] = NhapKho_PB.MaKho;
            name[4] = "@soluong"; value[4] = NhapKho_PB.SoLuong;
            name[5] = "@thanhtien"; value[5] = NhapKho_PB.ThanhTien;
            name[6] = "@dongia"; value[6] = NhapKho_PB.DonGia;
            string sql = "insert into CHITIETNHAP values (@id,@mapn,@mahang,@makho,@soluong,@thanhtien,@dongia)";

            return conn.Update(sql, name, value, nparameter);
        }
        #endregion

        #region "Sửa CT Nhập kho"
        public int SuaCTNhapKho(NhapKho_PB nk_pb)
        {
            int nparameter = 6;
            string[] name = new string[nparameter];
            object[] value = new object[nparameter];
            name[0] = "@id"; value[0] = NhapKho_PB.ID;
            name[1] = "@mahang"; value[1] = NhapKho_PB.MaHang;
            name[2] = "@makho"; value[2] = NhapKho_PB.MaKho;
            name[3] = "@soluong"; value[3] = NhapKho_PB.SoLuong;
            name[4] = "@dongia"; value[4] = NhapKho_PB.DonGia;
            name[5] = "@thanhtien"; value[5] = NhapKho_PB.ThanhTien;
            string sql = "update CHITIETNHAP set MAHANG=@mahang,MAKHO=@makho,SOLUONG=@soluong,DONGIA=@dongia,THANHTIEN=@thanhtien where ID=@id";
            return conn.Update(sql, name, value, nparameter);
        }
        #endregion

        #region "Xóa CT Nhập kho"
        public int XoaCTNhapKho(NhapKho_PB nk_pb)
        {
            int nparameter = 1;
            string[] name = new string[nparameter];
            object[] value = new object[nparameter];
            name[0] = "@id"; value[0] = NhapKho_PB.ID;
            //name[1] = "@mapn"; value[1] = NhapKho_PB.MaPhieuNhap;
            //name[1] = "@mahang"; value[1] = NhapKho_PB.MaHang;
            //name[2] = "@makho"; value[2] = NhapKho_PB.MaKho;
            //name[3] = "@soluong"; value[3] = NhapKho_PB.SoLuong;
            //name[4] = "@dongia"; value[4] = NhapKho_PB.DonGia;
            string sql = "delete from CHITIETNHAP where ID=@id";
            return conn.Update(sql, name, value, nparameter);
        }
        #endregion

        #region "Tìm theo mã phiếu nhập"
        public DataTable TimMaPhieuNhap(string ma)
        {
            string sql = string.Format("select ID,MAPHIEUNHAP,MAHANG,ctn.MAKHO,ctn.SOLUONG,THANHTIEN,DONGIA,vt.TENVATTU,kh.TENKHO,dvt.DIENGIAI "+
                        " from CHITIETNHAP ctn,KHO kh,VATTU vt,DONVITINH dvt "+ 
                        " where ctn.MAHANG=vt.MAVATTU and ctn.MAKHO=kh.MAKHO and vt.DONVITINH=dvt.MADONVITINH and ctn.MAPHIEUNHAP='{0}'",ma);
            return conn.LoadData(sql);
        }
        #endregion

        #region "Tìm theo ID Chi tiết phiếu nhập"
        public DataTable TimID(NhapKho_PB nk_pb)
        {
            string sql = string.Format("select * from CHITIETNHAP where MAPHIEUNHAP='{0}'",NhapKho_PB.MaPhieuNhap);
            return conn.LoadData(sql);
        }
        #endregion

        #region "Tăng mã tự động chi tiết nhập"
        public string NextID_CTN()
        {
            return NextID_PB.NextID(conn.GetLastID("CHITIETNHAP", "ID"), "CTN");
        }
        #endregion

        #region "Tăng mã tự động phiếu nhập"
        public string NextID_PN()
        {
            return NextID_PB.NextID(conn.GetLastID("PHIEUNHAP", "MAPHIEUNHAP"), "PN");
        }
        #endregion

        #region Thêm tồn kho
        public int ThemTonKho(NhapKho_PB nk_pb)
        {
            int nparameter = 4;
            string[] name = new string[nparameter];
            object[] value = new object[nparameter];
            name[0] = "@mahang"; value[0] = NhapKho_PB.MaHang;
            name[1] = "@kho"; value[1] = NhapKho_PB.MaKho;
            name[2] = "@soluong"; value[2] = NhapKho_PB.SoLuong;
            name[3] = "@matk"; value[3] = NhapKho_PB.IDTonKho;
            string sql = "insert into TONKHO values(@matk,@mahang,@kho,@soluong,null,null)";
            return conn.Update(sql, name, value, nparameter);
        }
        #endregion

        #region Sửa tồn kho
        public int SuaTonKho(NhapKho_PB nk_pb)
        {
            int nparameter = 3;
            string[] name = new string[nparameter];
            object[] value = new object[nparameter];
            name[0] = "@mahang"; value[0] = NhapKho_PB.MaHang;
            name[1] = "@kho"; value[1] = NhapKho_PB.MaKho;
            name[2] = "@soluong"; value[2] = NhapKho_PB.SoLuong;
            //name[3] = "@id"; value[3] = NhapKho_PB.IDTonKho;
            string sql = "update TONKHO set SOLUONG=@soluong where MAVATTU=@mahang and KHO=@kho";
            return conn.Update(sql, name, value, nparameter);
        }
        #endregion

        #region Kiểm tra mã hàng cả kho đó có trong bảng tôn kho chưa
        //kiem tra ton tai
        public bool CheckExists(string mavattu,string makho)
        {
            if ((conn.CheckExistValues("TONKHO", "MAVATTU", mavattu, makho)))
                return true;
            return false;
        }
        #endregion

        #region Lấy số lượng tồn kho
        public int LaySLTonKho(string mavattu,string makho)
        {
            string sql = string.Format("select * from TONKHO where MAVATTU='{0}' and KHO='{1}'", mavattu,makho);
            return conn.LaySLTonKho(sql);
        }
        #endregion

        #region "Tăng mã tự động tồn kho"
        public string NextID_TK()
        {
            return NextID_PB.NextID(conn.GetLastID("TONKHO", "MATK"), "TK");
        }
        #endregion

        
    }
}
